#pragma once
#include <string>
#include <map>
#include "../Object.h"
#include "../Constants.h"
#include "Material.h"
POCELAIN_NAMESPACE_BEGIN
class POCELAIN_EXPORT RawShaderMaterial: public Material
{
public:
    RawShaderMaterial();
    virtual ~RawShaderMaterial();
    virtual EObjectClass getObjectClass() const override {return EObjectClass::E_RAW_SHADER_MATERIAL;}
    void shaderSource(EShaderType shaderType,std::string source);
    std::string getShaderSource(EShaderType shaderType) const;


private:
    std::string mVertShader;
    std::string mFragShader;
    std::string mTessShader;
    std::string mGeomShader;
};
class POCELAIN_EXPORT ShaderMaterial: public RawShaderMaterial
{
public:
    ShaderMaterial();
    virtual ~ShaderMaterial();
    virtual EObjectClass getObjectClass() const override {return EObjectClass::E_SHADER_MATERIAL;}

private:
    std::string mVertShader;
    std::string mFragShader;
    std::string mTessShader;
    std::string mGeomShader;
};
POCELAIN_NAMESPACE_END
